package Fundamental.complement;

public class InterviewQuestion {
    public static void main(String[] args) {
        byte b = (byte)129;
        /**
         * 这个题目考察了三个知识点：
         * 1. 整数的字面量默认是 int 类型的。而 int 类型占 32 个 bit 。
         * 2. byte 类型的是 8 ge bit 。
         * 3. 补码的计算公式。
         * 4. 强制类型转换
         * 129 = 2 的 7 次方 + 1
         * 所以在内存中的表示为： 0000 0000 0000 0000 0000 0000 1000 0001
         * byte 强转后       ：                               1000 0001
         * 前面的 16 位都已经消失了。 我们看到最高位是一个 1 ，说明这是一个负数，
         * 负数，我们知道计算机里面，负数是用补码表示的，所以这东西可不是表示的 -1
         * 它表示的是某个负数的补码。例如我们现在有个负数了 A ，那 A的补码 = ~A +1.
         * 现在我们有补码了所以需要 ~(A的补码 -1) = A ,做这样的一个操作。先来看
         * 我们先将符合位去掉
         *                  补码 -1：      000 0001 - 000 0001 = 000 0000
         *                    取反：                             111 1111
         * 111 1111 换算成 10 进制：2 的 7 方 - 1 = 127
         * 所以答案是 -127
         * */
        /**
         * 负数的二进制是补码，所以它位运算比较不好弄。
         * -2 的补码表示位 1111 1111 1111 1111 1111 1111 1111 1110
         * */
        System.out.println(b);
        byte bb = 0 ;
        for (int i = 0; i < Math.pow(2, 8); i++) {
            bb++;
            System.out.println(String.format("第 %s 次加1 ， bb 的值为: %s" , i+1 , bb));
        }
    }
}
